package day5;

public class Demo7 {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("a: " + a); // 10
        int b = a << 1;
        System.out.println("a << 1: " + b); // 20
        b = a << 2;
        System.out.println("a << 2: " + b); // 40
        b = a << 3;
        System.out.println("a << 3: " + b); // 80
//结果：每左移1位，等同 == (值 * 2)
        a = -10;
        b = a << 2;
// -10补码：1 1(23) 1111 0110
// 左移2位，结果：
// 1(22) 1111 011000
// 即： 1 1(23) 1101 1000
// -1得反码： 1 1(23) 1101 0111
// 保留符号位，其他为取反，得原码：
// 原: 1 0(23) 0010 1000 ==> -40
        System.out.println("a << 4: " + b);
// 如果左移位数太多，超出了数值表示范围，如何处理？
// 数值 << n 等同 数值 << (n%当前数值所占比特位数)
        b = a << 33;
        System.out.println("a << 33: " + b); //-20
        System.out.println("a << (33%32): " + b); //-20
    }
}